/** * Copyright (C) 2015 Born Informatik AG (www.born.ch) * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.wte4j.ui.client.templates.upload; import org.gwtbootstrap3.client.ui.Button; import org.gwtbootstrap3.client.ui.Image; import org.gwtbootstrap3.client.ui.gwt.FlowPanel; import org.gwtbootstrap3.client.ui.gwt.FormPanel; import com.google.gwt.core.client.GWT; import com.google.gwt.dom.client.IFrameElement; import com.google.gwt.event.dom.client.ClickHandler; import com.google.gwt.event.dom.client.LoadEvent; import com.google.gwt.event.dom.client.LoadHandler; import com.google.gwt.uibinder.client.UiBinder; import com.google.gwt.uibinder.client.UiField; import com.google.gwt.user.client.ui.Composite; import com.google.gwt.user.client.ui.FileUpload; import com.google.gwt.user.client.ui.FormPanel.SubmitCompleteEvent; import com.google.gwt.user.client.ui.FormPanel.SubmitCompleteHandler; import com.google.gwt.user.client.ui.Frame; import com.google.gwt.user.client.ui.Hidden; import com.google.gwt.user.client.ui.Widget; public class TemplateUploadFormPanel extends Composite implements TemplateUploadDisplay { private String id; @UiField(provided = true) FormPanel formPanel; @UiField FlowPanel flowPanel; @UiField Button submitButton; @UiField Button cancelButton; @UiField FileUpload fileUpload; @UiField Hidden templateName; @UiField Hidden templateLanguage; @UiField Image loadingSpinner; private static TemplateUploadFormPanelUiBInder uiBinder = GWT .create(TemplateUploadFormPanelUiBInder.class); public TemplateUploadFormPanel(String id) { this.id = id; initForm(); initWidget(uiBinder.createAndBindUi(this)); initIFrame(); } private void initForm() { formPanel = new FormPanel(id); formPanel.setEncoding(FormPanel.ENCODING_MULTIPART); formPanel.setMethod(FormPanel.METHOD_POST); } private void initIFrame() { final Frame iframe = new Frame("javascript:\"\""); iframe.getElement().setAttribute("name", id); iframe.getElement().setAttribute("style", "position:absolute;width:0;height:0;border:0"); iframe.addLoadHandler(new LoadHandler() { @Override public void onLoad(LoadEvent arg0) { String content = IFrameElement.as(iframe.getElement()).getContentDocument().getBody().getInnerHTML(); if (content != null && !"".equals(content)) formPanel.fireEvent(new SubmitCompleteEvent(content) { }); } }); flowPanel.add(iframe); } @Override public void setAction(String templateUploadRestURL) { formPanel.setAction(templateUploadRestURL); } @Override public void startLoadingAnimation() { loadingSpinner.setVisible(true); setButtonsVisible(false); } @Override public void stopLoadingAnimation() { loadingSpinner.setVisible(false); setButtonsVisible(true); } @Override public void addSubmitButtonClickHandler(ClickHandler clickHandler) { submitButton.addClickHandler(clickHandler); } @Override public void addCancelButtonClickHandler(ClickHandler clickHandler) { cancelButton.addClickHandler(clickHandler); } @Override public void addSubmitCompleteHandler(SubmitCompleteHandler handler) { formPanel.addSubmitCompleteHandler(handler); } @Override public void submitForm() { formPanel.submit(); } private void setButtonsVisible(boolean visible) { submitButton.setVisible(visible); cancelButton.setVisible(visible); } public void setTemplateName(String value) { templateName.setValue(value); } public void setLanguage(String value) { templateLanguage.setValue(value); } interface TemplateUploadFormPanelUiBInder extends UiBinder<Widget, TemplateUploadFormPanel> { } }